package cn.seaboot.html.table;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;

import java.awt.*;

/**
 * html 单元格
 * <p>
 * 对应于 html 中的 td 标签
 *
 * @author Mr.css
 * @version 2025-06-25 18:04
 */
public class TD {

    /**
     * 哑元元素，用于表示被合并的单元格
     */
    public static final TD CONTINUE = new TD();

    /**
     * 单元格内容
     */
    private String value;


    /**
     * 自定义属性
     *
     * 数据引用的 key 值
     */
    private String ref;

    /**
     * 宽度，如果为 0 需要转为默认值
     * <p>
     * 这个属性很特殊，一般来说，只需要设置第一行即可
     * <p>
     * 如果有 html 中 th 的概念，只需要设置 th 的宽度即可。
     * <p>
     * 见过一些便捷的设计：将第一行和第一列隐藏，专门用于宽度和高度的设置。
     */
    private int width;

    /**
     * 水平合并单元格数量
     */
    private int colspan = 1;

    /**
     * 垂直合并单元格数量
     */
    private int rowspan = 1;
    /**
     * 字体序号，类似于 class，用于样式查找
     */
    private String className;

    /**
     * 水平对齐方向
     */
    private HorizontalAlignment align;

    /**
     * 垂直对齐方向
     */
    private VerticalAlignment valign;
    /**
     * 背景色
     */
    private Color backgroundColor;


    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getRef() {
        return ref;
    }

    public void setRef(String ref) {
        this.ref = ref;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getColspan() {
        return colspan;
    }

    public void setColspan(int colspan) {
        this.colspan = colspan;
    }

    public int getRowspan() {
        return rowspan;
    }

    public void setRowspan(int rowspan) {
        this.rowspan = rowspan;
    }


    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public HorizontalAlignment getAlign() {
        return align;
    }

    public void setAlign(HorizontalAlignment align) {
        this.align = align;
    }

    public VerticalAlignment getValign() {
        return valign;
    }

    public void setValign(VerticalAlignment valign) {
        this.valign = valign;
    }

    public Color getBackgroundColor() {
        return backgroundColor;
    }

    public void setBackgroundColor(Color backgroundColor) {
        this.backgroundColor = backgroundColor;
    }

    @Override
    public String toString() {
        return "TableData{" +
                "value='" + value + '\'' +
                ", ref=" + ref +
                ", width=" + width +
                ", colspan=" + colspan +
                ", rowspan=" + rowspan +
                ", className=" + className +
                ", align=" + align +
                ", valign=" + valign +
                ", backgroundColor=" + backgroundColor +
                '}';
    }
}
